package zgh.structure.agent.jdkproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author zhanggonghui
 * @create 2022-04-17 14:32
 * @describe B代理商 全面代理公司所有的业务
 **/
public class TVProxyFactory {

    private Object target;

    public TVProxyFactory(Object o) {
        this.target = o;
    }

    public Object getProxy() {
        // 使用Proxy.newProxyInstance方法生成代理对象
        // 实现InvocationHandler中的 invoke方法，在invoke方法中通过反射调用代理类的方法，并提供增强方法
        return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(),
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("电视代理找电视工厂。。。。");
                        Object invoke = method.invoke(target, args);
                        return invoke;
                    }
                });
    }

}
